
# 算术运算符 （+、-、*、/、//、 %）
a = 10
b = 20

print("a+b=", a+b)
print("a-b=", a-b)
print("a*b=", a*b)
print("a/b=", a/b)
# // => 取整除：a/b得到的结果进行取整
print("a//b=", a//b)
# %  => 模 - 取余数：a/b得到余数
print("a%b=", a%b)


# 赋值运算符
a = 1
a += 1   # a=a+1
print("a += 1", a)
a -= 1   # a=a-1
print("a -= 1", a)
# print("a -= 1", a+=1)
# 参数中不能有赋值运算的

# 比较运算符   =>  结果： bool值
a = 100
b = 200
print("a>b:", a>b)
print("a>b:", a>b)

# 逻辑运算符   => 取结果： bool
#            => 实际返回：根据运算顺序返回表达式的结果
# a and b: 如果a的bool为True，且b的bool为True => True
# 10 => True
# 0 => False
# 10 and 0 => False
print("10 and 0:", 10 and 0)


# 运算顺序：
# 1. 计算a表达式的结果，如果a表达式结果bool为False，直接a表达式的结果
print(0 and 10)
# 2. 计算a表达式的结果，如果a表达式结果bool为True，计算表达式b的结果并返回
print(10+10 and 10)    # True
print(10+10 and None)  # False

# a or b : 如果a或b任意一个表达式bool值为True，表达式bool值结果为True
# 1. 计算a表达式的结果，如果a表达式结果bool为True，直接a表达式的结果
print(20 or 10)
# 2. 计算a表达式的结果，如果a表达式结果bool为False，计算表达式b的结果并返回
print(None or 10)


# not a =>只有两个结果=>True 或 False
# 非运算
print(not 10)    # False
print(not None)  # True

# 20<x<30 or x<-100
# y%2 == 1
# y%2 != 0
# or

# a and b and c and d
# 从左往右计算，计算表达式的布尔值为True继续向后计算，
# 表达式的布尔值为False直接返回表达式的结果

# a or b or c or d
# 从左往右计算，计算表达式的布尔值为False继续向后计算，
# 表达式的布尔值为True直接返回表达式的结果

# a and b or c
#

# not




# 成员关系运算符 in , not in # => True / False
# 是否包含(字符串、[列表、元组、字典] => 容器类型)
mystr = "2022/03/26"
print('2022' in mystr)
print('2022' not in mystr)

# 对象实例测试
# is,not is => 判断两个对象是不是同一个对象（同一块内存区域）
# 比较id,
# is =>       id(a) == id(b)
# not is =>   id(a) != id(b)


# 位运算符 => 数字类型
# & => 按位与 => 同为1结果为1，否则为0
a = 2  # 0b10
b = 3  # 0b11
print(a & b)  # 0b10 =>2

# | => 按位或 => 任意一个为1结果为1，否则为0
a = 4  # 0b100
b = 5  # 0b101
print(a | b)  # 0b101 =>5

# ^ => 按位异或 => 两位相同结果为0，不相同结果为1
a = 4  # 0b100
b = 5  # 0b101
print(a ^ b)  # 0b1 =>1

# ~ 按位取反
a = 1
print(~a)

# 左移运算<< 右移运算 >>
# 将数据变成2进制
# 0b10 << 2  => 0b1000
# 0b1010 >> 2 => 0b10




3 or print("5") and print("abc")
# 3

print("5") or 3 and print("abc")
# 5 =>
# print("5") => None =>bool


# 127>>2
# "abc" in str1






